FileFilter এবং DirectoryWalker

Java Technologies - অ্যাপাচি কমন্স আইও (Apache Common IO)
190
190

Apache Commons IO লাইব্রেরি ফাইল এবং ডিরেক্টরি সম্পর্কিত বিভিন্ন কার্যক্রম সহজ করে তোলে। এর মধ্যে FileFilter এবং DirectoryWalker দুটি গুরুত্বপূর্ণ ক্লাস যা ফাইল এবং ডিরেক্টরি ম্যানিপুলেশন ও ফিল্টারিং কার্যক্রমে ব্যবহৃত হয়।

এখানে আমরা FileFilter এবং DirectoryWalker এর ভূমিকা এবং উদাহরণ নিয়ে বিস্তারিত আলোচনা করব।


FileFilter: ফাইল ফিল্টারিং

FileFilter একটি ইন্টারফেস যা ফাইল সিস্টেমে ফাইল এবং ডিরেক্টরি ফিল্টার করতে ব্যবহৃত হয়। Apache Commons IOFileFilter-এর বিভিন্ন বাস্তবায়ন (implementations) রয়েছে, যা নির্দিষ্ট শর্তাবলী অনুসারে ফাইলগুলো নির্বাচন করে।

FileFilter উদাহরণ:

WildcardFileFilter ব্যবহার করে আপনি একটি প্যাটার্নের ভিত্তিতে ফাইলগুলো ফিল্টার করতে পারেন, যেমন একটি নির্দিষ্ট এক্সটেনশন বা নামের ভিত্তিতে।

import org.apache.commons.io.filefilter.WildcardFileFilter;
import java.io.File;
import java.io.FileFilter;

public class FileFilterExample {
    public static void main(String[] args) {
        File directory = new File("/path/to/directory");

        // Create a file filter to find all .txt files
        FileFilter filter = new WildcardFileFilter("*.txt");

        // List all .txt files in the directory
        File[] txtFiles = directory.listFiles(filter);

        for (File file : txtFiles) {
            System.out.println(file.getName());
        }
    }
}

এখানে:

  • WildcardFileFilter একটি ফাইল ফিল্টার যা .txt এক্সটেনশনের সব ফাইল খুঁজে বের করতে ব্যবহৃত হয়।
  • listFiles() মেথডের মাধ্যমে সেই ফাইলগুলো প্রদর্শিত হবে।

FileFilter উদাহরণ - AndFileFilter এবং OrFileFilter:

কিছু সময় আপনাকে একাধিক শর্তের ভিত্তিতে ফাইল ফিল্টার করতে হতে পারে। এর জন্য AndFileFilter এবং OrFileFilter ব্যবহার করা যায়।

import org.apache.commons.io.filefilter.AndFileFilter;
import org.apache.commons.io.filefilter.OrFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;

import java.io.File;
import java.io.FileFilter;

public class ComplexFileFilterExample {
    public static void main(String[] args) {
        File directory = new File("/path/to/directory");

        // Create two file filters
        FileFilter txtFilter = new WildcardFileFilter("*.txt");
        FileFilter jpgFilter = new WildcardFileFilter("*.jpg");

        // Combine filters using AndFileFilter (both conditions must be true)
        FileFilter combinedFilter = new AndFileFilter(txtFilter, jpgFilter);

        // List all .txt and .jpg files
        File[] files = directory.listFiles(combinedFilter);

        for (File file : files) {
            System.out.println(file.getName());
        }
    }
}

এখানে:

  • AndFileFilter ব্যবহার করে .txt এবং .jpg ফাইল উভয় ফিল্টার করা হয়েছে। আপনি এখানে OrFileFilter ব্যবহার করলে একাধিক শর্তের মধ্যে কোনো একটি শর্ত পূর্ণ হলেই ফাইলটি নির্বাচিত হবে।

DirectoryWalker: ডিরেক্টরি ট্রাভার্সিং

DirectoryWalker একটি কাস্টম ক্লাস যা আপনাকে একটি ডিরেক্টরি এবং তার সকল সাবডিরেক্টরি ট্রাভার্স (ভ্রমণ) করতে সাহায্য করে। আপনি DirectoryWalker ব্যবহার করে ডিরেক্টরির মধ্যে সমস্ত ফাইল এবং ডিরেক্টরি সম্পর্কিত কাজ করতে পারেন, যেমন ফাইলের প্রক্রিয়াকরণ, ডিরেক্টরি পরিবর্তন ইত্যাদি।

DirectoryWalker একটি abstract ক্লাস, যা সাধারণত DirectoryWalker এর walk() মেথড দ্বারা ডিরেক্টরি হ্যান্ডলিং এর কাজ সম্পাদন করে।

DirectoryWalker উদাহরণ:

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;

import java.io.File;
import java.io.IOException;

public class DirectoryWalkerExample {
    public static void main(String[] args) {
        try {
            // Specify the directory to be walked
            File directory = new File("/path/to/directory");

            // Use DirectoryWalker to recursively walk through the directory
            FileUtils.listFilesAndDirs(directory, FileFilterUtils.trueFileFilter(), DirectoryFileFilter.INSTANCE)
                    .forEach(file -> System.out.println(file.getAbsolutePath()));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

এখানে:

  • FileUtils.listFilesAndDirs() মেথডটি ব্যবহার করে DirectoryWalker এর মাধ্যমে directory এবং তার সকল সাব-ডিরেক্টরি ট্রাভার্স করা হচ্ছে। এতে FileFilterUtils.trueFileFilter() ফাইল ফিল্টার ব্যবহার করা হয়েছে যাতে সমস্ত ফাইল নির্বাচিত হয় এবং DirectoryFileFilter.INSTANCE ব্যবহার করে সব ডিরেক্টরি নির্বাচন করা হচ্ছে।

FileFilter এবং DirectoryWalker এর প্রয়োজনীয়তা

FileFilter এবং DirectoryWalker এর মধ্যে একটি মৌলিক পার্থক্য হল, FileFilter সাধারণত একক ফাইল ফিল্টারিং করার জন্য ব্যবহৃত হয়, যখন DirectoryWalker ডিরেক্টরি এবং তার উপাদানগুলোকে ট্রাভার্স করার জন্য ব্যবহৃত হয়।

FileFilter এর প্রয়োজনীয়তা:

  1. ফাইল ফিল্টারিং: যখন আপনাকে নির্দিষ্ট এক্সটেনশন বা নামের ভিত্তিতে ফাইল ফিল্টার করতে হয়।
  2. ইনলাইন ফিল্টারিং: ফাইল ফিল্টারিং করার জন্য কমপ্লেক্স শর্ত সেট করা এবং এগুলি ডিরেক্টরির মধ্যে প্রয়োগ করা।

DirectoryWalker এর প্রয়োজনীয়তা:

  1. ডিরেক্টরি ট্রাভার্সিং: ডিরেক্টরি এবং তার সমস্ত সাবডিরেক্টরি বা ফাইল ট্রাভার্স করার জন্য।
  2. কাস্টম ফাইল প্রক্রিয়াকরণ: ডিরেক্টরির মধ্যে সব ফাইল এক্সপ্লোর এবং কাস্টম প্রক্রিয়া প্রয়োগ করার জন্য।

সারাংশ

Apache Commons IO এর FileFilter এবং DirectoryWalker ক্লাসগুলি ফাইল এবং ডিরেক্টরি ম্যানিপুলেশন এবং ফিল্টারিংয়ের জন্য অত্যন্ত কার্যকরী। FileFilter আপনাকে ফাইলের মধ্যে শর্তাবলী অনুযায়ী ফিল্টারিং করতে সাহায্য করে, এবং DirectoryWalker ডিরেক্টরি এবং তার উপাদানগুলোকে ট্রাভার্স করে সহজে ফাইল প্রক্রিয়া বা কাস্টম অপারেশন করার সুবিধা দেয়। এই দুটি উপকরণই Java-তে ফাইল সিস্টেমের কার্যক্রমের উন্নতি এবং সহজিকরণে গুরুত্বপূর্ণ ভূমিকা পালন করে।

common.content_added_by

FileFilter ব্যবহার করে নির্দিষ্ট ফাইল ফিল্টার করা

149
149

Apache Commons IO লাইব্রেরি ফাইল এবং ডিরেক্টরি সম্পর্কিত কাজের জন্য FileFilter ক্লাস সরবরাহ করে, যা আপনাকে ফাইল ফিল্টার করার জন্য সহজ এবং কার্যকরী উপায় প্রদান করে। FileFilter এর মাধ্যমে আপনি নির্দিষ্ট ফাইলগুলিকে ফিল্টার করতে পারেন যেমন এক্সটেনশন বা নামের উপর ভিত্তি করে। এটি ফাইল সিস্টেমে দ্রুত এবং কার্যকরীভাবে ফাইল নির্বাচন বা ফিল্টার করার জন্য ব্যবহার করা যায়।

FileFilter Interface এবং Predicate

FileFilter একটি interface যা accept() মেথডে ফাইলের জন্য শর্ত বা প্রেডিকেট ব্যবহার করে। আপনি নিজের কাস্টম শর্ত অনুসারে ফাইল ফিল্টার করতে পারেন।

FileFilter সাধারণত FileUtils বা File ক্লাসের সাথে ব্যবহৃত হয় এবং নির্দিষ্ট শর্তে ফাইল নির্বাচন বা ফিল্টার করার জন্য এটি সহজ উপায় সরবরাহ করে।


FileFilter ব্যবহার করার পদক্ষেপ

  1. FileFilter ইন্টারফেস বাস্তবায়ন করা:
    • প্রথমত, FileFilter ইন্টারফেসটি বাস্তবায়ন করতে হবে যা accept() মেথডকে কাস্টম শর্ত অনুসারে পরিচালনা করবে।
  2. FileUtils এর সাথে FileFilter ব্যবহার:
    • FileUtils ক্লাসের listFiles() মেথডে FileFilter ব্যবহার করে ফাইল ফিল্টার করা সম্ভব।

FileFilter ব্যবহার করে নির্দিষ্ট ফাইল ফিল্টার করা

এখানে একটি উদাহরণ দেওয়া হল, যেখানে FileFilter ব্যবহার করে ফাইলের এক্সটেনশন .txt অনুযায়ী ফিল্টার করা হয়েছে:

FileFilter উদাহরণ:

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.FileFilterUtils;
import java.io.File;
import java.io.IOException;

public class FileFilterExample {
    public static void main(String[] args) {
        // ডিরেক্টরি যেখানে ফাইল ফিল্টার করা হবে
        File directory = new File("C:/exampleDirectory");

        // FileFilter তৈরি করুন যা .txt এক্সটেনশন সহ ফাইল ফিল্টার করবে
        FileFilter fileFilter = FileFilterUtils.suffixFileFilter(".txt");

        // FileUtils এর মাধ্যমে ফাইল ফিল্টার করা
        File[] filteredFiles = directory.listFiles((FileFilter) fileFilter);

        // ফিল্টার করা ফাইলগুলোর নাম প্রিন্ট করা
        if (filteredFiles != null) {
            for (File file : filteredFiles) {
                System.out.println(file.getName());
            }
        } else {
            System.out.println("কোনো .txt ফাইল পাওয়া যায়নি।");
        }
    }
}

ব্যাখ্যা:

  • FileFilterUtils.suffixFileFilter(".txt"): এই মেথডটি একটি ফাইল ফিল্টার তৈরি করে যা .txt এক্সটেনশনযুক্ত ফাইলগুলিকে ফিল্টার করবে।
  • listFiles() মেথডের মাধ্যমে নির্দিষ্ট ডিরেক্টরির মধ্যে ফাইল ফিল্টার করা হচ্ছে।
  • filteredFiles অ্যারে তে শুধু .txt ফাইল গুলি থাকবে যেগুলি ফিল্টার করা হয়েছে।

Output:

file1.txt
file2.txt

আরও উন্নত ফাইল ফিল্টারিং

আপনি আরও কাস্টম ফিল্টারিং শর্ত প্রয়োগ করতে পারেন যেমন ফাইলের আকার, নামের সাথে regex ম্যাচ, বা নির্দিষ্ট ফাইলের অন্তর্ভুক্তি বা অনুপস্থিতি।

কাস্টম FileFilter উদাহরণ (নাম অনুযায়ী ফিল্টারিং)

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.NameFileFilter;

import java.io.File;
import java.io.IOException;

public class CustomFileFilterExample {
    public static void main(String[] args) {
        // ডিরেক্টরি যেখানে ফাইল ফিল্টার করা হবে
        File directory = new File("C:/exampleDirectory");

        // কাস্টম ফাইল ফিল্টার তৈরি (নাম অনুযায়ী ফিল্টার)
        IOFileFilter fileFilter = new NameFileFilter("example");

        // FileUtils এর মাধ্যমে কাস্টম ফিল্টার প্রয়োগ করা
        File[] filteredFiles = directory.listFiles((IOFileFilter) fileFilter);

        // ফিল্টার করা ফাইলগুলোর নাম প্রিন্ট করা
        if (filteredFiles != null) {
            for (File file : filteredFiles) {
                System.out.println(file.getName());
            }
        } else {
            System.out.println("কোনো ফাইল পাওয়া যায়নি।");
        }
    }
}

ব্যাখ্যা:

  • NameFileFilter ফাইল নামের সাথে নির্দিষ্ট টেক্সট মেলা (matching) করতে ব্যবহৃত হয়। এখানে "example" শব্দ দিয়ে ফিল্টার করা হচ্ছে, যাতে শুধুমাত্র "example" নামের ফাইলগুলি ফিল্টার হবে।

Output:

exampleFile1.txt
exampleImage.jpg

FileFilter এর অন্যান্য ফিচার

  1. SuffixFileFilter:
    • এই ফিল্টারটি ফাইলের এক্সটেনশন অনুযায়ী ফাইল ফিল্টার করতে সাহায্য করে।
    • উদাহরণ: .txt, .jpg, ইত্যাদি।
  2. PrefixFileFilter:
    • এই ফিল্টারটি ফাইলের নামের প্রিফিক্স (prefix) অনুযায়ী ফাইল ফিল্টার করতে সাহায্য করে।
  3. TrueFileFilter:
    • এই ফিল্টারটি সব ফাইলকে accept করে এবং সব ফাইলকে অনুমোদন দেয়।
  4. DirectoryFileFilter:
    • এই ফিল্টারটি শুধুমাত্র ডিরেক্টরি গুলিকে ফিল্টার করতে ব্যবহৃত হয়।

Apache Commons IO এর FileFilter ক্লাসটি আপনাকে ফাইল ফিল্টারিংয়ের জন্য শক্তিশালী এবং নমনীয় পদ্ধতি প্রদান করে। আপনি FileFilterUtils ব্যবহার করে সহজেই এক্সটেনশন, নাম, সাইজ বা অন্যান্য শর্তে ফাইল ফিল্টার করতে পারেন। Apache Commons IO লাইব্রেরির এই ফিচারগুলি ফাইল সিস্টেমের সাথে কাজ করার সময় ডেভেলপারদের জন্য অনেক সহায়ক।

common.content_added_by

Wildcard এবং Regex ব্যবহার করে ফাইল ফিল্টার করা

141
141

Apache Commons IO লাইব্রেরি ফাইল এবং ডিরেক্টরি ম্যানিপুলেশনের জন্য অনেক কার্যকরী ইউটিলিটি সরবরাহ করে, যার মধ্যে Wildcard এবং Regex ব্যবহার করে ফাইল ফিল্টার করা অন্যতম। এই ফিচারটি ফাইল সিস্টেমে নির্দিষ্ট প্যাটার্ন বা কন্ডিশন অনুসারে ফাইলগুলো চয়ন করতে সহায়তা করে। এটি বিশেষ করে বড় ডিরেক্টরি বা ফাইল সিস্টেমে কাজ করার সময়ে খুবই উপকারী।

Wildcard এবং Regex এর মাধ্যমে ফাইল ফিল্টার করা হলে, আপনি নির্দিষ্ট ফাইল এক্সটেনশন, নাম বা অন্যান্য প্যাটার্নের ভিত্তিতে ফাইলগুলো ফিল্টার করতে পারবেন।


1. Wildcard ব্যবহার করে ফাইল ফিল্টার করা


Wildcard সাধারণত ফাইল নামের অংশের সাথে ম্যাচ করার জন্য ব্যবহৃত হয়, যেখানে বিশেষ চিহ্ন যেমন * (যেকোনো সংখ্যক অক্ষর) এবং ? (একটি অক্ষর) ব্যবহার করা হয়।

WildcardFileFilter ক্লাস Apache Commons IO তে একটি ফাইল ফিল্টার ক্লাস, যা ওয়াইল্ডকার্ড প্যাটার্নের মাধ্যমে ফাইল ফিল্টার করতে সহায়তা করে।

WildcardFileFilter উদাহরণ:

import org.apache.commons.io.filefilter.WildcardFileFilter;
import java.io.File;
import java.io.FileFilter;

public class WildcardFileFilterExample {
    public static void main(String[] args) {
        // Create a File object pointing to a specific directory
        File directory = new File("my_directory");

        // Create a FileFilter using Wildcard to filter files with .txt extension
        FileFilter fileFilter = new WildcardFileFilter("*.txt");

        // Get all .txt files in the directory
        File[] textFiles = directory.listFiles(fileFilter);

        // Print the file names
        for (File file : textFiles) {
            System.out.println(file.getName());
        }
    }
}

এখানে:

  • WildcardFileFilter("*.txt") ব্যবহার করে আমরা সমস্ত .txt এক্সটেনশনের ফাইলগুলো ফিল্টার করেছি।
  • * চিহ্ন ব্যবহার করা হয়েছে যাতে সমস্ত .txt ফাইল নির্বাচন করা যায়, যেগুলোর নাম যেকোনো হতে পারে।

Wildcard এর আরও উদাহরণ:

  • *.jpg: সকল JPEG ছবি ফাইল।
  • file?.txt: যেসব ফাইলের নাম file1.txt, file2.txt ইত্যাদি হয়।
  • report*: যে কোনো ফাইল যার নাম report দিয়ে শুরু হয়।

2. Regex ব্যবহার করে ফাইল ফিল্টার করা


Regex (Regular Expression) ব্যবহার করে আপনি আরও জটিল প্যাটার্নের মাধ্যমে ফাইল নাম ফিল্টার করতে পারেন। RegexFileFilter ক্লাস Apache Commons IO তে রয়েছে, যা আপনাকে regular expressions এর মাধ্যমে ফাইল ফিল্টার করার সুযোগ দেয়।

RegexFileFilter উদাহরণ:

import org.apache.commons.io.filefilter.RegexFileFilter;
import java.io.File;
import java.io.FileFilter;

public class RegexFileFilterExample {
    public static void main(String[] args) {
        // Create a File object pointing to a specific directory
        File directory = new File("my_directory");

        // Create a FileFilter using Regex to filter files that start with 'report' and end with .txt
        FileFilter fileFilter = new RegexFileFilter("^report.*\\.txt$");

        // Get all files matching the regex pattern
        File[] reportFiles = directory.listFiles(fileFilter);

        // Print the file names
        for (File file : reportFiles) {
            System.out.println(file.getName());
        }
    }
}

এখানে:

  • RegexFileFilter("^report.*\.txt$") ব্যবহার করা হয়েছে, যা report দিয়ে শুরু এবং .txt দিয়ে শেষ হওয়া ফাইলগুলোকে ফিল্টার করবে।
  • ^ এবং $ হল regex এর বর্ডার চিহ্ন, যেগুলি ফাইল নামের শুরু এবং শেষের সাথে মিলে।

Regex প্যাটার্নের কিছু উদাহরণ:

  • ^report.*\\.txt$: ফাইল নামের শুরুতে report এবং শেষের দিকে .txt থাকতে হবে।
  • .*\\.jpg$: যেকোনো ফাইল যার এক্সটেনশন .jpg
  • ^file[0-9]+\\.txt$: ফাইল নামের শুরুতে file এবং পরবর্তীতে এক বা একাধিক ডিজিট থাকতে হবে এবং ফাইলের এক্সটেনশন .txt হতে হবে।

3. Wildcard এবং Regex ব্যবহার করে একত্রিত ফিল্টার


আপনি Wildcard এবং Regex ফিল্টার একসাথে ব্যবহার করতে পারেন, যেমন ফাইলের নামের একটি অংশ ওয়াইল্ডকার্ড প্যাটার্ন দিয়ে এবং আরেকটি অংশ regex প্যাটার্ন দিয়ে ফিল্টার করা।

Wildcard এবং Regex একত্রিত ফিল্টার উদাহরণ:

import org.apache.commons.io.filefilter.WildcardFileFilter;
import org.apache.commons.io.filefilter.RegexFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import java.io.File;
import java.io.FileFilter;

public class CombinedFilterExample {
    public static void main(String[] args) {
        // Create a File object pointing to a specific directory
        File directory = new File("my_directory");

        // Create WildcardFileFilter to filter files with '.txt' extension
        IOFileFilter wildcardFilter = new WildcardFileFilter("*.txt");

        // Create RegexFileFilter to filter files starting with 'report' and ending with '.txt'
        IOFileFilter regexFilter = new RegexFileFilter("^report.*\\.txt$");

        // Combine both filters
        IOFileFilter combinedFilter = IOFileFilter.and(wildcardFilter, regexFilter);

        // Get all files matching both filters
        File[] filteredFiles = directory.listFiles((FileFilter) combinedFilter);

        // Print the file names
        for (File file : filteredFiles) {
            System.out.println(file.getName());
        }
    }
}

এখানে:

  • WildcardFileFilter("*.txt") এবং RegexFileFilter("^report.*\.txt$") কে একত্রিত করে এক ফিল্টার তৈরি করা হয়েছে।
  • IOFileFilter.and() পদ্ধতি ব্যবহার করে উভয় ফিল্টার একসাথে প্রয়োগ করা হয়েছে।

4. ব্যবহারকারী কেস: একাধিক প্যাটার্নের মাধ্যমে ফাইল ফিল্টারিং


ধরা যাক, আপনি একটি ডিরেক্টরিতে থাকা .txt এবং .csv এক্সটেনশনের ফাইলগুলো ফিল্টার করতে চান, যেগুলোর নাম log দিয়ে শুরু এবং একটি নির্দিষ্ট প্যাটার্নের সাথে মেলে।

import org.apache.commons.io.filefilter.RegexFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import java.io.File;

public class MultiplePatternsExample {
    public static void main(String[] args) {
        // Create a File object pointing to a specific directory
        File directory = new File("my_directory");

        // Create WildcardFileFilter to filter files with .txt and .csv extension
        IOFileFilter wildcardFilter = new WildcardFileFilter("*.{txt,csv}");

        // Create RegexFileFilter to filter files starting with 'log' and containing '2021'
        IOFileFilter regexFilter = new RegexFileFilter("^log.*2021.*");

        // Combine both filters
        IOFileFilter combinedFilter = IOFileFilter.and(wildcardFilter, regexFilter);

        // Get all files matching both filters
        File[] filteredFiles = directory.listFiles((FileFilter) combinedFilter);

        // Print the filtered file names
        for (File file : filteredFiles) {
            System.out.println(file.getName());
        }
    }
}

এখানে:

  • WildcardFileFilter("*.{txt,csv}") এবং RegexFileFilter("^log.2021.") একত্রিত করে, .txt এবং .csv এক্সটেনশন সহ ফাইলগুলো ফিল্টার করা হয়েছে যেগুলোর নাম log দিয়ে শুরু হয় এবং 2021 অন্তর্ভুক্ত করে।

সারাংশ


Apache Commons IO লাইব্রেরি দিয়ে Wildcard এবং Regex ব্যবহার করে আপনি সহজে ফাইল সিস্টেমে ফিল্টারিং করতে পারেন। WildcardFileFilter এবং RegexFileFilter ক্লাসগুলির মাধ্যমে আপনি নির্দিষ্ট প্যাটার্ন বা এক্সটেনশনের ভিত্তিতে ফাইলগুলো নির্বাচন করতে পারেন। একাধিক ফিল্টারকে একত্রিত (combine) করে আরও কাস্টমাইজড ফিল্টারিংও করা সম্ভব। এই ফিচারটি বিশেষভাবে কার্যকরী যখন ডিরেক্টরি বা ফাইল সিস্টেমে বড় ডেটাসেট থাকে এবং নির্দিষ্ট প্যাটার্ন অনুযায়ী ফাইল নির্বাচন করতে হয়।

common.content_added_by

DirectoryWalker এর মাধ্যমে ডিরেক্টরি ট্রাভার্স করা

134
134

Apache Commons IO লাইব্রেরি DirectoryWalker ক্লাস সরবরাহ করে, যা একটি ডিরেক্টরি এবং তার ভিতরের ফাইল এবং সাব-ডিরেক্টরি রিকার্সিভলি ট্রাভার্স (ভ্রমণ) করতে সহায়ক। এটি ডিরেক্টরি ট্রাভার্সাল, ফাইল এবং সাব-ডিরেক্টরি প্রসেসিং ইত্যাদি কাজগুলির জন্য খুবই কার্যকরী।

DirectoryWalker সাধারণত কাস্টম ডিরেক্টরি প্রসেসিং কাজের জন্য ব্যবহৃত হয়, যেখানে আপনাকে ডিরেক্টরি এবং ফাইলগুলো কাস্টম শর্তে ফিল্টার করতে বা প্রক্রিয়া করতে হয়।

1. DirectoryWalker কী?

DirectoryWalker হল একটি বিমূর্ত (abstract) ক্লাস যা directory traversal এর জন্য ব্যবহৃত হয়। এটি সাধারণত একটি ডিরেক্টরি এবং তার ভিতরের সমস্ত ফাইল ও সাব-ডিরেক্টরি রিকার্সিভভাবে ট্রাভার্স করার জন্য ব্যবহৃত হয়। DirectoryWalker এ দুটি প্রধান মেথড থাকে:

  1. handleFile(): ফাইল প্রক্রিয়া করার জন্য।
  2. handleDirectory(): সাব-ডিরেক্টরি প্রক্রিয়া করার জন্য।

DirectoryWalker কে ব্যবহার করতে, আপনাকে এই ক্লাসটি ইমপ্লিমেন্ট করতে হবে এবং আপনার প্রয়োজনীয় handleFile() এবং handleDirectory() মেথডগুলো কাস্টমাইজ করতে হবে।

2. DirectoryWalker ব্যবহার করার পদ্ধতি

DirectoryWalker ব্যবহার করার জন্য আপনাকে একটি কাস্টম ক্লাস তৈরি করতে হবে যা DirectoryWalker ক্লাসটিকে এক্সটেন্ড করবে এবং তার মধ্যে ফাইল এবং ডিরেক্টরি প্রসেসিংয়ের জন্য উপযুক্ত মেথড ইমপ্লিমেন্ট করতে হবে।

2.1 DirectoryWalker কাস্টম ক্লাস তৈরি করা

DirectoryWalker এর মাধ্যমে একটি ডিরেক্টরি ট্রাভার্স করার জন্য একটি কাস্টম ক্লাস তৈরি করা যেতে পারে, যেখানে আপনি handleFile() এবং handleDirectory() মেথডগুলোকে কাস্টমাইজ করবেন।

উদাহরণ: DirectoryWalker দিয়ে ডিরেক্টরি ট্রাভার্স করা

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.DirectoryWalker;
import java.io.File;
import java.io.IOException;

public class CustomDirectoryWalker extends DirectoryWalker {

    // কনস্ট্রাক্টর
    public CustomDirectoryWalker(IOFileFilter fileFilter, IOFileFilter directoryFilter) {
        super(fileFilter, directoryFilter);
    }

    // handleFile() মেথডটি ফাইল প্রসেস করতে ব্যবহৃত হয়
    @Override
    protected void handleFile(File file, int depth, java.util.List<File> results) throws IOException {
        System.out.println("File: " + file.getAbsolutePath());
    }

    // handleDirectory() মেথডটি সাব-ডিরেক্টরি প্রসেস করতে ব্যবহৃত হয়
    @Override
    protected void handleDirectory(File directory, int depth, java.util.List<File> results) throws IOException {
        System.out.println("Directory: " + directory.getAbsolutePath());
    }

    public static void main(String[] args) throws IOException {
        // ডিরেক্টরি এবং ফাইল ফিল্টার
        File rootDirectory = new File("path/to/directory");
        IOFileFilter fileFilter = TrueFileFilter.TRUE; // সকল ফাইলকে অন্তর্ভুক্ত করবে
        IOFileFilter directoryFilter = TrueFileFilter.TRUE; // সকল ডিরেক্টরিকে অন্তর্ভুক্ত করবে

        // CustomDirectoryWalker ক্লাসের অবজেক্ট তৈরি
        CustomDirectoryWalker walker = new CustomDirectoryWalker(fileFilter, directoryFilter);

        // ডিরেক্টরি ট্রাভার্স করা
        walker.walk(rootDirectory, null);
    }
}

আউটপুট:

Directory: /path/to/directory
File: /path/to/directory/file1.txt
File: /path/to/directory/file2.txt
Directory: /path/to/directory/subdir
File: /path/to/directory/subdir/file3.txt

এখানে:

  • handleFile() ফাংশনটি প্রতিটি ফাইলের উপর কাজ করবে এবং তার পাথ প্রিন্ট করবে।
  • handleDirectory() ফাংশনটি প্রতিটি সাব-ডিরেক্টরির উপর কাজ করবে এবং তার পাথ প্রিন্ট করবে।
  • walk() মেথডটি ডিরেক্টরি এবং ফাইলের ট্রাভার্সাল শুরু করবে।

2.2 FileFilter এবং DirectoryFilter ব্যবহার করা

DirectoryWalkerFileFilter এবং DirectoryFilter ব্যবহার করে আপনি ফাইল এবং ডিরেক্টরি ফিল্টারিং করতে পারেন, যেমন শুধুমাত্র নির্দিষ্ট ধরনের ফাইল বা ডিরেক্টরি প্রসেস করা।

উদাহরণ: শুধুমাত্র .txt ফাইল প্রসেস করা

import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.commons.io.DirectoryWalker;
import java.io.File;
import java.io.IOException;

public class CustomDirectoryWalker extends DirectoryWalker {

    public CustomDirectoryWalker() {
        super(FileFilterUtils.suffixFileFilter(".txt"), TrueFileFilter.TRUE);
    }

    @Override
    protected void handleFile(File file, int depth, java.util.List<File> results) throws IOException {
        System.out.println("Text File: " + file.getAbsolutePath());
    }

    @Override
    protected void handleDirectory(File directory, int depth, java.util.List<File> results) throws IOException {
        System.out.println("Directory: " + directory.getAbsolutePath());
    }

    public static void main(String[] args) throws IOException {
        File rootDirectory = new File("path/to/directory");
        CustomDirectoryWalker walker = new CustomDirectoryWalker();
        walker.walk(rootDirectory, null);
    }
}

আউটপুট:

Directory: /path/to/directory
Text File: /path/to/directory/file1.txt
Text File: /path/to/directory/file2.txt
Directory: /path/to/directory/subdir
Text File: /path/to/directory/subdir/file3.txt

এখানে:

  • FileFilterUtils.suffixFileFilter(".txt") ব্যবহার করে শুধুমাত্র .txt এক্সটেনশনযুক্ত ফাইলগুলোকেই ট্রাভার্স করার জন্য ফিল্টার করা হয়েছে।
  • handleFile() মেথডটি শুধুমাত্র .txt ফাইলগুলির উপর কাজ করবে এবং তাদের পাথ প্রিন্ট করবে।

3. DirectoryWalker এর অন্যান্য বৈশিষ্ট্য

  • Recursion Depth: DirectoryWalker রিকার্সিভভাবে ফাইল ও ডিরেক্টরি ট্রাভার্স করার জন্য গভীরতা ট্র্যাক করে।
  • Custom File Filters: আপনি কাস্টম ফাইল ফিল্টার তৈরি করতে পারেন যা নির্দিষ্ট শর্ত অনুযায়ী ফাইল ও ডিরেক্টরি নির্বাচন করে।
  • Handling Symlinks: লিঙ্কগুলির জন্য বিশেষ হ্যান্ডলিং যোগ করা যেতে পারে যাতে সেগুলি প্রক্রিয়াজাত করা যায়।

সারাংশ

  • DirectoryWalker ক্লাসটি Apache Commons IO লাইব্রেরির একটি শক্তিশালী বৈশিষ্ট্য, যা directory traversal এর জন্য ব্যবহৃত হয়।
  • DirectoryWalker ব্যবহার করে আপনি একটি ডিরেক্টরি এবং তার ভিতরের সকল ফাইল এবং সাব-ডিরেক্টরি রিকার্সিভভাবে ট্রাভার্স করতে পারেন।
  • handleFile() এবং handleDirectory() মেথডের মাধ্যমে আপনি ফাইল এবং ডিরেক্টরি প্রক্রিয়া করতে পারেন।
  • কাস্টম ফিল্টার, রিকার্সন, এবং ডিরেক্টরি ট্রাভার্সাল এর জন্য DirectoryWalker খুবই উপকারী।

Apache Commons IO এর DirectoryWalker ক্লাস ডিরেক্টরি এবং ফাইলের সাথে কাজ করার সময় আরও আধুনিক এবং কার্যকরী পদ্ধতি সরবরাহ করে, যা কোডকে আরও পরিষ্কার এবং রক্ষণাবেক্ষণের জন্য সহজ করে তোলে।

common.content_added_by

Recursive Directory Traversing এবং Custom Directory Walking

153
153

Apache Commons IO লাইব্রেরি ফাইল এবং ডিরেক্টরি সম্পর্কিত বিভিন্ন কার্যকলাপ সহজ এবং কার্যকরী করে তোলে। Recursive Directory Traversing এবং Custom Directory Walking দুটি গুরুত্বপূর্ণ কাজ, যেখানে একটি ডিরেক্টরির মধ্যে সব ফাইল বা সাবডিরেক্টরি অনুসন্ধান করা হয়, এবং যখন আমাদের কাস্টম লজিক বা ফিল্টারিং প্রয়োজন।

এই কাজগুলো সাধারণত ফাইল সিস্টেম থেকে ডেটা এক্সট্র্যাক্ট বা ম্যানিপুলেট করার জন্য ব্যবহৃত হয়। Apache Commons IO লাইব্রেরি FileUtils এবং DirectoryWalker ক্লাস সরবরাহ করে, যেগুলি রিকর্সিভ ডিরেক্টরি ট্রাভার্সিং এবং কাস্টম ডিরেক্টরি ওয়াকিং (directory walking) করতে ব্যবহৃত হয়।


১. Recursive Directory Traversing with FileUtils

FileUtils ক্লাসের সাহায্যে সহজেই রিকর্সিভ ডিরেক্টরি ট্রাভার্সিং করা সম্ভব। FileUtils.listFiles() মেথডটি রিকর্সিভভাবে ডিরেক্টরি এবং সাবডিরেক্টরিগুলির মধ্যে ফাইলগুলোকে একটি তালিকায় যুক্ত করে।

উদাহরণ: রিকর্সিভ ফাইল লিস্টিং

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.Collection;

public class RecursiveDirectoryTraversingExample {
    public static void main(String[] args) {
        File directory = new File("path/to/your/directory");

        // .txt এক্সটেনশন সহ সব ফাইল লিস্ট করতে রিকর্সিভ ফাইল লিস্টিং
        Collection<File> files = FileUtils.listFiles(directory, new String[] {"txt"}, true);

        for (File file : files) {
            System.out.println(file.getAbsolutePath());
        }
    }
}

ব্যাখ্যা:

  • FileUtils.listFiles(directory, new String[] {"txt"}, true) মেথডটি ডিরেক্টরি এবং তার সাবডিরেক্টরিগুলির মধ্যে .txt এক্সটেনশন সহ সমস্ত ফাইল রিকর্সিভভাবে খুঁজে বের করে।
  • তৃতীয় প্যারামিটার true বলে যে এটি রিকর্সিভভাবে ডিরেক্টরি ট্রাভার্স করবে।

২. Custom Directory Walking with DirectoryWalker

যখন আপনি কাস্টম লজিক ব্যবহার করে ডিরেক্টরি ট্রাভার্স করতে চান, তখন DirectoryWalker ক্লাসটি খুবই উপকারী। এটি আপনাকে ডিরেক্টরি এবং ফাইলের প্রতি কাস্টম আচরণ নির্ধারণ করতে দেয়।

উদাহরণ: কাস্টম ডিরেক্টরি ওয়াকিং

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.commons.io.filefilter.FileFilterUtils;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;

public class CustomDirectoryWalkingExample {
    public static void main(String[] args) {
        File directory = new File("path/to/your/directory");

        // ডিরেক্টরি ওয়াকিং কাস্টম ফিল্টার ব্যবহার করে
        Iterator<File> iterator = FileUtils.iterateFiles(directory, FileFilterUtils.suffixFileFilter(".txt"), TrueFileFilter.TRUE);

        while (iterator.hasNext()) {
            File file = iterator.next();
            // কাস্টম লজিক প্রয়োগ
            System.out.println("Processing file: " + file.getAbsolutePath());
        }
    }
}

ব্যাখ্যা:

  • FileUtils.iterateFiles(directory, FileFilterUtils.suffixFileFilter(".txt"), TrueFileFilter.TRUE) মেথডটি .txt এক্সটেনশন সহ সমস্ত ফাইল ডিরেক্টরি এবং তার সাবডিরেক্টরিগুলির মধ্যে খুঁজে বের করে।
  • FileFilterUtils.suffixFileFilter(".txt") ফিল্টার ব্যবহার করে শুধুমাত্র .txt এক্সটেনশন সহ ফাইলগুলিকে নির্বাচিত করা হয়েছে।
  • TrueFileFilter.TRUE সব ফাইল এবং ডিরেক্টরিকে ফিল্টার হিসেবে গ্রহণ করে (এটি কাস্টম ফিল্টার নির্ধারণে সাহায্য করতে পারে)।

৩. Custom Directory Walker with DirectoryWalker Class

DirectoryWalker ক্লাস আরও কাস্টমাইজড এবং উন্নত ডিরেক্টরি ট্রাভার্সিংয়ের জন্য ব্যবহৃত হয়। এই ক্লাসের মাধ্যমে আপনি ফাইল এবং ডিরেক্টরি ট্রাভার্স করার জন্য নিজস্ব কাস্টম লজিক সংজ্ঞায়িত করতে পারেন।

উদাহরণ: কাস্টম DirectoryWalker ইমপ্লিমেন্টেশন

import org.apache.commons.io.DirectoryWalker;
import java.io.File;
import java.io.IOException;

public class CustomDirectoryWalkerExample extends DirectoryWalker {

    public CustomDirectoryWalkerExample() {
        // কাস্টম ইমপ্লিমেন্টেশনের জন্য প্রয়োজনীয় কন্সট্রাক্টর
    }

    @Override
    protected void handleFile(File file, int depth) {
        // কাস্টম লজিক যা ফাইলের উপর প্রয়োগ হবে
        System.out.println("Processing file: " + file.getAbsolutePath());
    }

    @Override
    protected void handleDirectory(File directory, int depth) {
        // কাস্টম লজিক যা ডিরেক্টরির উপর প্রয়োগ হবে
        System.out.println("Entering directory: " + directory.getAbsolutePath());
    }

    public static void main(String[] args) throws IOException {
        File directory = new File("path/to/your/directory");

        // DirectoryWalker এর কাস্টম ইমপ্লিমেন্টেশন ব্যবহার করা
        CustomDirectoryWalkerExample walker = new CustomDirectoryWalkerExample();
        walker.walk(directory, null);  // `null` pass করা হয় কারণ এখানে ফিল্টার ব্যবহার করা হয়নি
    }
}

ব্যাখ্যা:

  • handleFile(File file, int depth): এই মেথডটি কাস্টম লজিক প্রয়োগ করতে ব্যবহৃত হয়, যা প্রতিটি ফাইলের জন্য চলে।
  • handleDirectory(File directory, int depth): এই মেথডটি ডিরেক্টরি ট্রাভার্স করার সময় প্রতিটি ডিরেক্টরির জন্য চলে।

DirectoryWalker অত্যন্ত শক্তিশালী এবং কাস্টম ডিরেক্টরি ওয়াকিংয়ের জন্য ব্যবহার করা হয়, যেখানে আপনি ফাইল এবং ডিরেক্টরি সম্পর্কিত নিজের লজিক প্রয়োগ করতে পারেন।


সারাংশ

Recursive Directory Traversing এবং Custom Directory Walking অ্যাপাচি কমন্স আইও লাইব্রেরির দুটি অত্যন্ত গুরুত্বপূর্ণ ফিচার যা ফাইল সিস্টেমে ডিরেক্টরি ট্রাভার্সিং এবং ফাইলের প্রক্রিয়াকরণের কাজগুলো সহজ করে তোলে।

  • FileUtils ক্লাস রিকর্সিভ ডিরেক্টরি ট্রাভার্সিংয়ের জন্য সহজ এবং দ্রুত উপায় প্রদান করে।
  • DirectoryWalker ক্লাস কাস্টম ডিরেক্টরি ট্রাভার্সিংয়ের জন্য একটি শক্তিশালী এবং নমনীয় উপায় যা আপনাকে কাস্টম লজিক প্রয়োগ করতে সাহায্য করে।

এই দুটি পদ্ধতির মাধ্যমে আপনি জটিল ফাইল সিস্টেমের কাজগুলো খুব সহজে এবং কার্যকরীভাবে পরিচালনা করতে পারবেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion